"""
求解线性方程组
给定一个方程组，如何求出其的方程解。有多种方法，分析各种方法的优缺点（最简单的方式是消元方）。
例如
3x + 4y + 2z = 10
5x + 3y + 4z = 14
8x + 2y + 7z = 20
编程写出求解的程序
"""
import numpy as np

# 解法1：消元法 算法逻辑简单，但代码较复杂
A = np.array([3, 4, 2, 10, 5, 3, 4, 14, 8, 2, 7, 20]).reshape(3, 4)
A1 = A[1] - A[0] * A[1, 0] / A[0, 0]
A2 = A[2] - A[0] * A[2, 0] / A[0, 0]
A3 = A2[2] - A1[2] * A2[1] / A1[1]
A2 = A2[3] - A1[3] * A2[1] / A1[1]
z = A2 / A3
y = (A1[3] - A1[2] * z) / A1[1]
x = (A[0, 3] - A[0, 2] * z - A[0, 1] * y) / A[0, 0]
s = np.array([x, y, z])
s = np.round(s, 2).astype('int')
print(s)
# 解法2：通过逆矩阵求解，调用numpy内置函数 代码简洁，效率高
A = np.array([3, 4, 2, 5, 3, 4, 8, 2, 7]).reshape(3, 3)
B = np.array([10, 14, 20])
s = np.linalg.solve(A, B)
s = np.round(s, 2).astype('int')
print(s)

